package com.techopropio.bfh.model;


import java.sql.Date;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;

import java.util.List;


public class Solicitud {
        private int id;
	private String telefono;
        private int numDependientes;
        private int numvecesPostulacion;
        private int numDiscapacitados;
        private Date fechaInscripcion;
        private String domicilioActual;
        private String entidadFinanciera;
        private Double montoAhorro;
        private String numCuenta;
        private Date fechaApertura;
        private int puntajeObtenido;
        private String estadoAceptacion;
        private AportacionFonavi aportacionFonavi;
        private Usuario user;
        private Convocatoria convocatoria;
	private String codigo;
	private GrupoFamiliar grupoFamiliar;
	private String constitucionDelHogar;
	private FinanciamientoComplementario financiamientoComplementario;
	private VictimaTerrorismo victimaTerrorismo;
	private List<Observacion> observaciones = new ArrayList<Observacion>();
        private String TipoContitucion;
        private String tipoPostulacion;
        private Vivienda vivienda;
        private String JefeFamiliaDiscapacitado;
        private Ahorro ahorro;
        private int PuntajeObtenido;
        

        public Solicitud (){
//            telefono="4589966";
//            numDependientes=2;
//            numvecesPostulacion=3;
//            numDiscapacitados=2;
//            fechaInscripcion= new Date(2011, 10, 01);
//            domicilioActual="calle las pizzas";
//            entidadFinanciera="BCP";
//            fechaApertura= new Date(2012, 01, 31);
//            numCuenta="1456-6632";
//            montoAhorro=12000.00;
//            convocatoria = new Convocatoria();
//            tipoPostulacion="Individual";
//            codigo = "123";
//            grupoFamiliar = new GrupoFamiliar();
//            constitucionDelHogar="Jefe de Familia solo";
//            financiamientoComplementario = new FinanciamientoComplementario();
//            victimaTerrorismo = new VictimaTerrorismo();
//          // aportacionFonavi = new AportacionFonavi();
//            estadoAceptacion="pendiente";
//            observaciones.add(new Observacion());
//            puntajeObtenido =0;
//            vivienda= new Vivienda();

        }

    public int getId() {
        return id;
    }

    public String getTelefono() {
        return telefono;
    }
    /**
     * @return the convocatoria
     */
        
    public Convocatoria getConvocatoria() {
        return convocatoria;
    }

    /**
     * @param convocatoria the convocatoria to set
     */
    public void setConvocatoria(Convocatoria convocatoria) {
        this.convocatoria = convocatoria;
    }

    /**
     * @return the codigo
     */
    public String getCodigo() {
        return codigo;
    }

    /**
     * @param codigo the codigo to set
     */
    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    /**
     * @return the grupoFamiliar
     */
    public GrupoFamiliar getGrupoFamiliar() {
        return grupoFamiliar;
    }

    /**
     * @param grupoFamiliar the grupoFamiliar to set
     */
    public void setGrupoFamiliar(GrupoFamiliar grupoFamiliar) {
        this.grupoFamiliar = grupoFamiliar;
    }

    /**
     * @return the tipoPostulacion
     */
    public String getTipoPostulacion() {
        return tipoPostulacion;
    }

    /**
     * @param tipoPostulacion the tipoPostulacion to set
     */
    public void setTipoPostulacion(String tipoPostulacion) {
        this.tipoPostulacion = tipoPostulacion;
    }

    /**
     * @return the constitucionDelHogar
     */
    public String getConstitucionDelHogar() {
        return constitucionDelHogar;
    }

    /**
     * @param constitucionDelHogar the constitucionDelHogar to set
     */
    public void setConstitucionDelHogar(String constitucionDelHogar) {
        this.constitucionDelHogar = constitucionDelHogar;
    }

    /**
     * @return the financiamientoComplementario
     */
    public FinanciamientoComplementario getFinanciamientoComplementario() {
        return financiamientoComplementario;
    }

    /**
     * @param financiamientoComplementario the financiamientoComplementario to set
     */
    public void setFinanciamientoComplementario(FinanciamientoComplementario financiamientoComplementario) {
        this.financiamientoComplementario = financiamientoComplementario;
    }

    /**
     * @return the victimaTerrorismo
     */
    public VictimaTerrorismo getVictimaTerrorismo() {
        return victimaTerrorismo;
    }

    /**
     * @param victimaTerrorismo the victimaTerrorismo to set
     */
    public void setVictimaTerrorismo(VictimaTerrorismo victimaTerrorismo) {
        this.victimaTerrorismo = victimaTerrorismo;
    }

    /**
     * @return the aportacionFonavi
     */
  

 

    /**
     * @return the estado
     */
    public String getEstado() {
        return getEstadoAceptacion();
    }

    /**
     * @param estado the estado to set
     */
    public void setEstado(String estado) {
        this.setEstadoAceptacion(estado);
    }

    /**
     * @return the observaciones
     */
    public List<Observacion> getObservaciones() {
        return observaciones;
    }

    /**
     * @param observaciones the observaciones to set
     */
    public void setObservaciones(List<Observacion> observaciones) {
        this.setObservaciones(observaciones);
    }



    public String getDomicilioActual() {
        return domicilioActual;
    }

    public String getEntidadFinanciera() {
        return entidadFinanciera;
    }

    public String getEstadoAceptacion() {
        return estadoAceptacion;
    }

    public Date getFechaApertura() {
        return fechaApertura;
    }

    public Date getFechaInscripcion() {
        return fechaInscripcion;
    }

    public Double getMontoAhorro() {
        return montoAhorro;
    }

    public String getNumCuenta() {
        return numCuenta;
    }

    public int getNumDependientes() {
        return numDependientes;
    }

    public int getNumDiscapacitados() {
        return numDiscapacitados;
    }

    public int getNumvecesPostulacion() {
        return numvecesPostulacion;
    }

    public int getPuntajeObtenido() {
        return puntajeObtenido;
    }

    public Usuario getUser() {
        return user;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @param telefono the telefono to set
     */
    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    /**
     * @param numDependientes the numDependientes to set
     */
    public void setNumDependientes(int numDependientes) {
        this.numDependientes = numDependientes;
    }

    /**
     * @param numvecesPostulacion the numvecesPostulacion to set
     */
    public void setNumvecesPostulacion(int numvecesPostulacion) {
        this.numvecesPostulacion = numvecesPostulacion;
    }

    /**
     * @param numDiscapacitados the numDiscapacitados to set
     */
    public void setNumDiscapacitados(int numDiscapacitados) {
        this.numDiscapacitados = numDiscapacitados;
    }

    /**
     * @param fechaInscripcion the fechaInscripcion to set
     */
    public void setFechaInscripcion(Date fechaInscripcion) {
        this.fechaInscripcion = fechaInscripcion;
    }

    /**
     * @param domicilioActual the domicilioActual to set
     */
    public void setDomicilioActual(String domicilioActual) {
        this.domicilioActual = domicilioActual;
    }

    /**
     * @param entidadFinanciera the entidadFinanciera to set
     */
    public void setEntidadFinanciera(String entidadFinanciera) {
        this.entidadFinanciera = entidadFinanciera;
    }

    /**
     * @param montoAhorro the montoAhorro to set
     */
    public void setMontoAhorro(Double montoAhorro) {
        this.montoAhorro = montoAhorro;
    }

    /**
     * @param numCuenta the numCuenta to set
     */
    public void setNumCuenta(String numCuenta) {
        this.numCuenta = numCuenta;
    }

    /**
     * @param fechaApertura the fechaApertura to set
     */
    public void setFechaApertura(Date fechaApertura) {
        this.fechaApertura = fechaApertura;
    }

    /**
     * @param puntajeObtenido the puntajeObtenido to set
     */
    public void setPuntajeObtenido(int puntajeObtenido) {
        this.puntajeObtenido = puntajeObtenido;
    }

    /**
     * @param estadoAceptacion the estadoAceptacion to set
     */
    public void setEstadoAceptacion(String estadoAceptacion) {
        this.estadoAceptacion = estadoAceptacion;
    }

    /**
     * @param user the user to set
     */
    public void setUser(Usuario user) {
        this.user = user;
    }



    /**
     * @return the vivienda
     */
    public Vivienda getVivienda() {
        return vivienda;
    }

    /**
     * @param vivienda the vivienda to set
     */
    public void setVivienda(Vivienda vivienda) {
        this.vivienda = vivienda;
    }

    /**
     * @return the aportacionFonavi
     */
    public AportacionFonavi getAportacionFonavi() {
        return aportacionFonavi;
    }

    /**
     * @param aportacionFonavi the aportacionFonavi to set
     */
    public void setAportacionFonavi(AportacionFonavi aportacionFonavi) {
        this.aportacionFonavi = aportacionFonavi;
    }

    /**
     * @return the TipoContitucion
     */
    public String getTipoContitucion() {
        return TipoContitucion;
    }

    /**
     * @param TipoContitucion the TipoContitucion to set
     */
    public void setTipoContitucion(String TipoContitucion) {
        this.TipoContitucion = TipoContitucion;
    }



    /**
     * @return the JefeFamiliaDiscapacitado
     */
    public String getJefeFamiliaDiscapacitado() {
        return JefeFamiliaDiscapacitado;
    }


    /**
     * @param JefeFamiliaDiscapacitado the JefeFamiliaDiscapacitado to set
     */
    public void setJefeFamiliaDiscapacitado(String JefeFamiliaDiscapacitado) {
        this.JefeFamiliaDiscapacitado = JefeFamiliaDiscapacitado;
    }

    public void addObservacion(Observacion observacion){
        this.getObservaciones().add(observacion);
    }
           
     /**
     * @return the ahorro
     */
    public Ahorro getAhorro() {
        return ahorro;
    }

    /**
     * @param ahorro the ahorro to set
     */
    public void setAhorro(Ahorro ahorro) {
        this.ahorro = ahorro;
    }

 /*CALCULAMOS EL PUNTAJE OBTENIDO*/

public double calcularPuntaje(){
    
    int p1,p2,p3;
    double p4,p5,p6;
    
    //La primera evaluacion numero de dependientes
    p1 = obtenerPNumD();
    //El numero de discapacitados sin contar al JF
    p2 = obtenerPNumDisc();
    //El Puntaje por el tipo de Jefe de Familia
    p3 = obtenerPJH();
    //El puntaje Ahorro Adicional
    p4 = obtenerPAhorro();
    //El puntaje por permanencia de ahorro
    p5 = obtenerPPerA();
    //El puntaje por asignacion sucesiva
    p6 = obtenerPSoliciS();
    
    return p1+p2+p3+p4+p5+p6;
}

    public int obtenerPNumD(){
        if(numDependientes<=6){
            return numDependientes*10;
        }else{
            return 60;//maximo puntaje por esta evaluacion
        }
    }
    
    public int obtenerPNumDisc(){
        if(numDiscapacitados<=2){
            return numDiscapacitados*10;
        }else{
            return 20;//puntaje max por esta evaluación
        }
    }
    
    public int obtenerPJH(){
          if(TipoContitucion.equals("Jefe de Familia solo")){
            return 10;
          }else if(TipoContitucion.equals("Jefa de Familia sola")){
            return 15;
          }else if(TipoContitucion.equals("Discapacitado")||TipoContitucion.equals("JFAM")){
            return 5;
          }else{
              return 0;
          } 
    }
    
    
    public double obtenerPAhorro(){
//        int AT=0,Amin=0;
        double Areal = montoAhorro - aportacionFonavi.getMontoMensual();//Ahorro total menos ahorro minimo 
            
            if(Areal<=2800){
                return (Areal*0.5)/50;
            }else{
                return 28;//el puntaje maximo
            }
    }
    
    public double obtenerPPerA(){
        Calendar fechaActual = new GregorianCalendar();
        int anio = fechaActual.get(Calendar.YEAR) - fechaApertura.getYear();
        int Treal = anio*12 - fechaApertura.getMonth() + fechaActual.get(Calendar.MONTH);
        //Es el tiempo en meses cuando el dinero aun permanecia
        if(Treal<=12){
            return Treal*2;
        }else{
            return 24;//Puntaje maximo por permanencia de ahorro
        }
    }
    
    public int obtenerPSoliciS(){
        //numero de Postulaciones
        if(numvecesPostulacion<=4){
            return numvecesPostulacion*5;
        }else{
            return 20;
        }
    }
       

}
